package com.qfedu.sys.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.qfedu.sys.domain.User;
import com.qfedu.sys.domain.UserVo;
import com.qfedu.sys.service.IUserService;
import com.qfedu.sys.utils.SysConstant;
import com.qfedu.sys.utils.WebUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @Author:千锋强哥
 * @organization: 千锋教研院
 * @Version: 1.0
 */
@Controller
@RequestMapping("login")
public class LoginController {

    @Autowired
    private IUserService userService;

    /**
     * 跳转到登录页面
     */
    @RequestMapping("toLogin")
    public String toLogin(){
        return "system/main/login";
    }

    /**
     * 生成验证码
     * 参数没有：前台传递的是一个加盐 ？  /HttpServletResponse response , HttpSession session
     * 返回值：  通过io流的方式向 login.jsp写出一个图片 ， 不需要返回值
     */
    @RequestMapping("getCode")
    public void getCode(HttpSession session , HttpServletResponse response) throws IOException {
        //1.生成一个图片的对象，需要一个工具
        //生成创建图片的对象  116 宽度  37 高度  4 生成的验证码有四个字符   5 有5条干扰线
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(116, 37, 4, 5);
        //2.获取session ，将生成的code验证码放到session
        session.setAttribute("code",lineCaptcha.getCode());
        //3.将图片以io流的方式发送到前台login.jsp
        ServletOutputStream outputStream = response.getOutputStream();
        //4.将图片写道前台
        ImageIO.write(lineCaptcha.getImage(),"JPEG",outputStream);
    }

    /**
     * 用户登录的方法
     * 参数：UserVo 封装用户名密码验证码  ， Model 将一些提示信息存在model
     * 返回值类型：String 因为要进行页面跳转
     */
    @RequestMapping("login")
    public String login(UserVo userVo ,HttpSession session , Model model){
        //1.获取验证码，先要获取session ，从它里面获取code
        String sessionCode = session.getAttribute("code").toString();
        //2.让用户输入的验证码和session中存放的code比较看看是否一致
        if(userVo.getCode().equals(sessionCode)){
            //3.接着比较用户名和密码
            User user = userService.login(userVo);
            if(user != null){
                //用户名和密码是正确的
                session.setAttribute("user",user);
                return "system/main/index";
            }else{
                //用户名和密码是错误的
                model.addAttribute("error", SysConstant.USER_LOGIN_ERROR_MSG);
                return "system/main/login";
            }

        }else{
            //4.验证码错误，返回登录页面，并给予提示
            model.addAttribute("error",SysConstant.USER_LOGIN_CODE_ERROR_MSG);
            return "system/main/login";
        }
    }
}
